package flash.net;

extern class NetStream extends flash.events.EventDispatcher {
	var audioCodec(default,null) : UInt;
	@:require(flash10_1) var audioReliable : Bool;
	@:require(flash10_1) var audioSampleAccess : Bool;
	@:require(flash10_1) var backBufferLength(default,null) : Float;
	@:require(flash10_1) var backBufferTime : Float;
	var bufferLength(default,null) : Float;
	var bufferTime : Float;
	@:require(flash10_1) var bufferTimeMax : Float;
	var bytesLoaded(default,null) : UInt;
	var bytesTotal(default,null) : UInt;
	var checkPolicyFile : Bool;
	var client : Dynamic;
	var currentFPS(default,null) : Float;
	@:require(flash10_1) var dataReliable : Bool;
	var decodedFrames(default,null) : UInt;
	@:require(flash10) var farID(default,null) : String;
	@:require(flash10) var farNonce(default,null) : String;
	@:require(flash10_1) var inBufferSeek : Bool;
	@:require(flash10) var info(default,null) : NetStreamInfo;
	var liveDelay(default,null) : Float;
	@:require(flash10) var maxPauseBufferTime : Float;
	@:require(flash10_1) var multicastAvailabilitySendToAll : Bool;
	@:require(flash10_1) var multicastAvailabilityUpdatePeriod : Float;
	@:require(flash10_1) var multicastFetchPeriod : Float;
	@:require(flash10_1) var multicastInfo(default,null) : NetStreamMulticastInfo;
	@:require(flash10_1) var multicastPushNeighborLimit : Float;
	@:require(flash10_1) var multicastRelayMarginDuration : Float;
	@:require(flash10_1) var multicastWindowDuration : Float;
	@:require(flash10) var nearNonce(default,null) : String;
	var objectEncoding(default,null) : UInt;
	@:require(flash10) var peerStreams(default,null) : Array<Dynamic>;
	var soundTransform : flash.media.SoundTransform;
	var time(default,null) : Float;
	@:require(flash11) var useHardwareDecoder : Bool;
	@:require(flash11_3) var useJitterBuffer : Bool;
	var videoCodec(default,null) : UInt;
	@:require(flash10_1) var videoReliable : Bool;
	@:require(flash10_1) var videoSampleAccess : Bool;
	@:require(flash11) var videoStreamSettings : flash.media.VideoStreamSettings;
	function new(connection : NetConnection, ?peerID : String) : Void;
	@:require(flash10_1) function appendBytes(bytes : flash.utils.ByteArray) : Void;
	@:require(flash10_1) function appendBytesAction(netStreamAppendBytesAction : String) : Void;
	@:require(flash10_1) function attach(connection : NetConnection) : Void;
	function attachAudio(microphone : flash.media.Microphone) : Void;
	function attachCamera(theCamera : flash.media.Camera, snapshotMilliseconds : Int = -1) : Void;
	function close() : Void;
	@:require(flash11_2) function dispose() : Void;
	@:require(flash10) function onPeerConnect(subscriber : NetStream) : Bool;
	function pause() : Void;
	function play(?p1 : Dynamic, ?p2 : Dynamic, ?p3 : Dynamic, ?p4 : Dynamic, ?p5 : Dynamic) : Void;
	@:require(flash10) function play2(param : NetStreamPlayOptions) : Void;
	function publish(?name : String, ?type : String) : Void;
	function receiveAudio(flag : Bool) : Void;
	function receiveVideo(flag : Bool) : Void;
	function receiveVideoFPS(FPS : Float) : Void;
	function resume() : Void;
	function seek(offset : Float) : Void;
	function send(handlerName : String, ?p1 : Dynamic, ?p2 : Dynamic, ?p3 : Dynamic, ?p4 : Dynamic, ?p5 : Dynamic) : Void;
	@:require(flash10_1) function step(frames : Int) : Void;
	function togglePause() : Void;
	@:require(flash10) static var CONNECT_TO_FMS : String;
	@:require(flash10) static var DIRECT_CONNECTIONS : String;
}
